#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
    pid_t id = fork();
    if(id < 0)
    {
        perror("fork fail\n");
        return 1;
    }
    else if(id == 0)
    {
        printf("child process runs, pid: %d\n",getpid());
        sleep(5);
        exit(1);
    }
    else{
        int status = 0;
        pid_t child_id = 0;
        do{
            child_id = waitpid(-1,&status,WNOHANG);
            if(child_id == 0)
            {
                printf("child process is running\n");
            }
            sleep(1);
        }while(child_id == 0);

        if(WIFEXITED(status) && child_id == id)
        {
            printf("wait child 5 seconds success, child return code is: %d\n",WEXITSTATUS(status));
        }
        else{
            printf("wait child failed, return\n");
            return 1;
        }
    }

//    pid_t id = fork();
//    if(id < 0)
//    {
//        perror("fork fail\n");
//        return 1;
//    }
//    else if(id == 0)
//    {
//        int cnt = 5;
//        while(cnt)
//        {
//            printf("i am a child, pid: %d, ppid: %d, cnt: %d\n",getpid(),getppid(),cnt);
//            cnt--;
//            sleep(1);
//        }
//        exit(1);
//    }
//    else{
//        int status = 0;
//        pid_t child_id = waitpid(id,&status,0);
//        if(id == child_id)
//        {
//            printf("waitpid success!!\n");
//        }
//        while(1)
//        {
//            printf("i am your father, pid: %d, ppid: %d\n",getpid(),getppid());
//            sleep(1);
//        }
//    }
//    pid_t id = fork();
//    if(id < 0)
//    {
//        perror("fork fail\n");
//        return 1;
//    }
//    else if(id == 0)
//    {
//        int cnt = 5;
//        while(cnt)
//        {
//            printf("this is a child, pid: %d, ppid: %d, cnt: %d\n",getpid(),getppid(),cnt);
//            cnt--;
//            sleep(1);
//        }
//        exit(1);
//    }
//    else{
//        int cnt = 10;
//        while(cnt)
//        {
//            printf("this is a father, pid: %d, ppid: %d\n",getpid(),getppid());
//            cnt--;
//            sleep(1);
//        }
//        pid_t child_id = wait(NULL);
//        if(child_id == id)
//        {
//            printf("wait success!!!child id = %d\n",id);
//        }
//    }
//    
//    sleep(5);
//
    return 0;
}

